// dart中一切皆对象,function也是对象有专门的Function对象
// 箭头语法
// 方法都有返回值默认为return null
// 方法的返回类型和传入的参数类型是可以省略的

// 可选参数设置
// 默认参数只能是可选参数

// 方法对象

void main(List args) {
  // args为传入的参数,在命令行中可以直接dart run function.dart 1 'test' true传入参数类型为数组
  print(args);
  print(getPerson('test', 12));
  print(jtFn('test', 12));
  getInt('23234e3', b: 32, c: 100); // 可选参数花括号形式
  getInt1('23234e3', 333); // 可选参数中括号形式

  Function func = getInt1('test', 234);
  func; //不会执行且func()报错

// 匿名方法
  Function func1 = () {
    print('匿名方法');
  };
  func1();

  // 闭包
  var funA =
      fna(); // fna只执行一次只打印一次1111111111111111111111111111(多次执行会初始化count无法形成闭包)
  funA();
  funA();
  funA();
}

String getPerson(String name, int age) {
  return 'name: ${name}, age: $age';
}

jtFn(name, age) => 'name: ${name}, age: $age';

getInt(String a, {int b = 10, num c = 10}) {
  // 正常参数在可选参数前面以及默认参数值
  print('a:${a},b:${b},c:${c}');
}

getInt1(String a, [int b = 1, num c = 30]) {
  // 正常参数在可选参数前面
  print('a:${a},b:${b},c:${c}');
}

fna() {
  int count = 0;
  print('1111111111111111111111111111');
  returnFn() {
    print(count++);
  }

  return returnFn;
}
